#!/bin/bash
# **********************************************************
# * Author : liangliangSu
# * Email : sll917@hotmail.com
# * Create time : 2022-12-25 20:29
# * Filename : condition_数值测试.sh
# **********************************************************
: '条件测试 | 数值测试
编写Shell脚本时，有时要先测试字符串是否一致、数字是否相等或者检查文件状态，基于这些测试的结果再做下一步的操作。Shell脚本的条件测试可以用于测试字符串、文件状态和数字。
测试完成后可以通过“$?”获取测试的结果，其中0为正确，1为错误。
数值测试用于对两个数值进行比较并得出判断结果，包括：等于、不等于、大于、大于等于、小于、小于等于。
数值判断的格式：[ 数值1 关系运算符 数值2 ]
方括号与条件之间必须要有空格。
数值测试的关系运算符
关系运算符	说明
-eq 	两个数值相等
-ne	两个数值不相等
-gt	第一个数大于第二个数
-lt	第一个数小于第二个数
-ge	第一个数大于等于第二个数
-le	第一个数小于等于第二个数
测试两个数值是否相等；
'
echo '(1)------------------------------------------------------------------'
[ 1024 -eq 1024 ]        
echo $?
[ 1124 -eq 1024 ]
echo $?
number1=500                 
number2=254                
[ $number1 -gt $number2 ]
echo $?
: '

条件测试 | 字符串测试
字符串测试可以对两个字符串的值进行比较，也可以测试单个字符串的值是否为空或者非空。
字符串测试的格式：[ 关系运算符 字符串 ]或者[ 字符串1 关系运算符 字符串2 ]
字符串测试的关系运算符
关系运算符	说明
=	两个字符串相等
!=	两个字符串不相等
-z	字符串为空
-n      字符串不为空

要测试两个字符串是否相等'
echo '(2)------------------------------------------------------------------'
[ "abc" = "abc" ]
echo $?
#把第一个字符串更改为bac后进行测试
[ "bac" = "abc" ]
echo $?
#如果把运算符改为“!=”
[ "bac" != "abc" ]
echo $?
#判断环境变量是否为空或者非空
[ -z $python1 ]
echo $?
[ -n $python1 ]
echo $?
python1="test"       
[ -z $python1 ]
echo $?

echo '(3)------------------------------------------------------------------'
: '
条件测试 | 文件状态测试
Linux的Shell脚本支持对文件状态的检测，包括检测文件的类型、文件的权限和文件的长度等
文件状态测试的格式：[ 关系运算符 字符串 ]
文件状态测试的关系运算符
关系运算符	说明
-d	目录
-f	一般文件
-L	链接文件
-r      可读
-w	可写
-x	可执行
-u	设置了suid
-s	文件长度大于0、非空
'
[ -r 01if_else语句.sh ]
echo $?   #HelloWorld.sh 文件可读

[ -w 01if_else语句.sh ]
echo $?   #HelloWorld.sh 文件可写

[ -x 01if_else语句.sh ]
echo $?   #HelloWorld.sh 文件可执行

: '
条件测试的逻辑操作符
逻辑操作符分以下3种：
-a：逻辑与，只有当操作符两边的条件均为真时，结果为真，否则为假。
-o：逻辑或，操作符两边的条件只要有一个为真，结果为真，只有当两边所有条件为假时，结果为假。
!：逻辑否，条件为假，结果为真。
'
echo '(4)------------------------------------------------------------------'
#如果要测试两个文件的状态
ls -l 02if_and_or.sh 03case语句.sh*
[ -r 02if_and_or -a -r 03case语句.sh* ]
echo $?

[ -x 02if_and_or -a -x 03case语句.sh* ]
echo $?

echo '(5)------------------------------------------------------------------'
#如果要测试两个数值变量
number1=10
number2=20
[ $number1 -eq 10 -a $number2 -gt 20 ] #测试是否number1 大于10 且 number2 大于20
#[ $number1 -eq 10 -o $number2 -gt 20 ] #测试是否number1 大于10 或 number2 大于20
echo $?
#如果要测试文件test1 是否为不可读
[ ! -r  02if_and_or ] #测试文件是否为不可读
echo $?
